package bdsimple.impl.mysql;

import bdsimple.abstractfactory.AbstractFactoryDAO;
import bdsimple.dao.base.ItemDAO;
import bdsimple.dao.base.TarjetaMemoriaDAO;
import bdsimple.dao.base.TarjetaMemoriaItemDAO;
import bdsimple.dto.base.ItemDTO;
import bdsimple.dto.base.TarjetaMemoriaDTO;
import bdsimple.dto.base.TarjetaMemoriaItemDTO;
import dao.base.impl.BaseDTO;
import dao.base.impl.Reference;

public class TarjetaMemoriaItemDTOImpl extends BaseDTO implements TarjetaMemoriaItemDTO {

	public TarjetaMemoriaItemDTOImpl() {
		super(TarjetaMemoriaItemDAO.class);
	}
	// ---------------------------------------------------------------------------

	private final Reference<TarjetaMemoriaDTO> tarjetaMemoriaDTORef = //
		  new Reference<TarjetaMemoriaDTO>();
	
	private final Reference<ItemDTO> itemRef = //
			new Reference <ItemDTO>();
	
	// ---------------------------------------------------------------------------

	public TarjetaMemoriaDTO getTarjetaMemoriaDTO() {
		if (tarjetaMemoriaDTORef.getRefValue() == null) {
			if (tarjetaMemoriaDTORef.getRefIdent() != 0) {
				try {

					// Lazy load the departmentDTORef
					TarjetaMemoriaDAO tarjetaMemoriaDAO = (TarjetaMemoriaDAO) AbstractFactoryDAO
							.getFactoryDAO(). //
							getDAO(TarjetaMemoriaDAO.class, connectionBean);

					tarjetaMemoriaDTORef.setRefValue( //
							(TarjetaMemoriaDTO) tarjetaMemoriaDAO
									.loadById(tarjetaMemoriaDTORef
											.getRefIdent()));

				} catch (Exception e) {
					e.printStackTrace();
					throw new RuntimeException(e);
				}
			}
		}

		return tarjetaMemoriaDTORef.getRefValue();
	}

	public void setTarjetaMemoriaDTO(TarjetaMemoriaDTO tarjetaMemoriaDTO) {
		this.tarjetaMemoriaDTORef.setRefValue(tarjetaMemoriaDTO);
	}
	
	@Override
	public Reference<TarjetaMemoriaDTO> getTarjetaMemoriaDTORef() {
		return tarjetaMemoriaDTORef;
	}
	
	// ---------------------------------------------------------------------------

	@Override
	  public ItemDTO getItemDTORef() {
	    if (itemRef.getRefValue() == null) {
	      if (itemRef.getRefIdent() != 0) {
	        try {

	          // Lazy load the itemDTORef
	          ItemDAO itemDAO = (ItemDAO) AbstractFactoryDAO.getFactoryDAO(). //
	              getDAO(ItemDAO.class, connectionBean);

	          itemRef.setRefValue( //
	              (ItemDTO) itemDAO.loadById(itemRef.getRefIdent()));

	        } catch (Exception e) {
	          e.printStackTrace();
	          throw new RuntimeException(e);
	        }
	      }
	    }

	    return itemRef.getRefValue();
	  }
	
	@Override
	  public void setItemDTORef(ItemDTO itemDTORef) {
	    this.itemRef.setRefValue(itemDTORef);
	  }
	

	  public Reference<ItemDTO> getItemRef() {
	    return itemRef;
	  }
	
	// ---------------------------------------------------------------------------

}
